/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val === undefined ? 0 : val)
 *     this.next = (next === undefined ? null : next)
 * }
 */
/**
 * @param {number[]} nums
 * @param {ListNode} head
 * @return {ListNode}
 */
var modifiedList = function (nums, head) {
  // 将nums中的元素存入Set，便于O(1)时间复杂度的查找
  const numSet = new Set(nums);

  // 创建虚拟头节点，简化头节点可能被删除的情况处理
  const dummy = new ListNode(0);
  dummy.next = head;

  // 用于遍历链表的指针，初始指向虚拟头节点
  let current = dummy;

  // 遍历链表
  while (current.next !== null) {
    // 如果当前节点的下一个节点的值在Set中，说明需要移除该节点
    if (numSet.has(current.next.val)) {
      current.next = current.next.next;
    } else {
      // 否则，移动指针到下一个节点
      current = current.next;
    }
  }

  // 返回修改后的链表的头节点（虚拟头节点的下一个节点）
  return dummy.next;
};
